//
// Created by francklinson on 2021/5/7.
//
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    vector<int> mostCompetitive(vector<int> &nums, int k) {
        // 单调递增栈
        vector<int> ans;
        int n = nums.size(), count = n - k;
        // 增加一个计数器，用来记录可以进行删除的次数
        // 到达0以后，就不能继续删除，只能直接加在后面
        for (int & num : nums) {
            while (!ans.empty() && num < ans.back() && count > 0) {
                ans.pop_back();
                count--;
            }
            ans.push_back(num);
        }
        while (ans.size() > k) // 截取到目标数量
            ans.pop_back();
        return ans;
    }
};

int main() {
    vector<int> nums{3, 5, 2, 6};
    Solution sol;
    auto ans = sol.mostCompetitive(nums, 2);
    for (const auto &x:ans) cout << x << endl;
    return 0;
}